package com.building18.mapper;

import com.building18.pojo.Permission;
import com.building18.pojo.vo.PermissionVO;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper

public interface PermissionMapper {
    /**
     * 查询所有权限信息
     * @return 包含所有权限信息的列表
     */
    @Select("select id, pname, parent_id, url, code, level, sort from sys_permission")
    List<Permission> selectPermission();

    /**
     * 根据父权限ID查询对应父权限ID和名称
     * @param parentId 父权限ID
     * @return 包含父权限ID和名称的列表
     */
    @Select("select id,pname from sys_permission where parent_id = #{parentId}")
    List<PermissionVO> getAllPerms(Integer parentId);

    /**
     * 根据角色ID查询权限ID
     * @param rid 角色ID
     * @return 包含权限ID的列表
     */
    @Select("select sys_role_permission.permission_id from sys_role_permission where role_id = #{rid}")
    List<Integer> getAllPermsByRid(Integer rid);

    /**
     * 根据权限ID查询父级权限ID
     * @param pid 权限ID
     * @return 父级权限ID
     */
    @Select("select parent_id from sys_permission where id = #{pid}")
    Integer getParentId(Integer pid);

    /**
     * 根据角色id删除对应权限
     * @param id 角色ID
     * @return 删除的记录数
     */
    @Delete("delete from sys_role_permission where role_id = #{id}")
    Integer deletePermsByRid(Integer id);

    /**
     * 在中间表新增修改角色权限
     * @param pid 角色ID
     * @param ids 权限ID列表
     * @return 操作影响的记录数
     */
    Integer saveNewPerms(@Param("pid") Integer pid, @Param("ids") List<Integer> ids);

    /**
     * 修改权限信息
     * @param permission 权限对象，包含要更新的权限信息
     * @return 更新的记录数
     */
    @Update("update sys_permission set pname = #{pname}, url = #{url}, code = #{code}, level = #{level}, sort = #{sort} where id = #{id}")
    Integer updatePermission(Permission permission);

    /**
     * 删除中间表权限关联的行数据
     * @param id 权限ID
     * @return 删除的记录数
     */
    @Delete("delete from sys_role_permission where permission_id = #{id}")
    Integer deleteUidAndPidById(Integer id);

    @Delete("delete from sys_permission where id = #{id}")
    Integer deletePermission(Integer id);

    void addPermsByFile(@Param("data") List<Permission> data);

    @Select("select id from sys_role_permission where role_id = #{id}")
    List<Integer> beforeDeleteRole(Integer id);

    List<Permission> selectAllMenuPerms(@Param("id") Integer id,@Param("parentId") Integer parentId);


    List<String> selectAllButtonPerms(Integer uid);
}
